package com.business.business.common.base;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import org.apache.ibatis.annotations.Param;

import java.io.Serializable;
import java.util.List;

/**
 * @author
 * @date 2019/1/2 16:30
 */
public interface BasisMapper<T> extends BaseMapper<T> {


    /**
     * <p>
     * 根据 ID 查询，锁定查询记录
     * </p>
     *
     * @param id 主键ID
     */
    T selectLockById(Serializable id);

    /**
     * <p>
     * 根据 ID 查询，NoLock 查询记录
     * </p>
     *
     * @param id 主键ID
     */
    T selectNoLockById(Serializable id);

    /**
     * <p>
     * 根据 entity 条件，查询一条记录，锁定查询记录
     * </p>
     *
     * @param queryWrapper 实体对象封装操作类（可以为 null）
     */
    T selectLockOne(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

    /**
     * <p>
     * 根据 entity 条件，查询一条记录，NoLock 查询记录
     * </p>
     *
     * @param queryWrapper 实体对象封装操作类（可以为 null）
     */
    T selectNoLockOne(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);


    /**
     * <p>
     * 根据 entity 条件，查询全部记录
     * </p>
     *
     * @param queryWrapper 实体对象封装操作类（可以为 null）
     */
    List<T> selectLockList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

    /**
     * <p>
     * 根据 entity 条件，查询全部记录
     * </p>
     *
     * @param queryWrapper 实体对象封装操作类（可以为 null）
     */
    List<T> selectNoLockList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

}
